package br.com.bomsabor.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashSet;
import java.util.Set;

import br.com.bomsabor.model.Produto;

public class ImplProdutoDAO implements ProdutoDAO {
	
	
	public Produto incluir(Produto p) {
		String sql = "INSERT INTO Produto (nomeProd, descricaoProd, valorProd) " +
				"VALUES (?, ?, ?)";
		Connection con = GenericDAO.getConnection();
		
		try {
			PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			ps.setString(1, p.getNomeProduto());
			ps.setString(2, p.getDescricaoProduto());
			ps.setDouble(3, p.getValorProduto());
			ps.executeUpdate();
			
			ResultSet rs = ps.getGeneratedKeys();
			rs.next();
			p.setCodProduto(rs.getInt(1));
						
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return p;
	}

	public void alterar(Produto p) {
		String sql = "UPDATE Produto SET nomeProd = ?, descricaoProd = ?, valorProd = ? " +
				"WHERE codProd = ?";
		Connection con = GenericDAO.getConnection();
		PreparedStatement ps;
		try {
			ps = con.prepareStatement(sql);
		
			ps.setString(1, p.getNomeProduto());
			ps.setString(2, p.getDescricaoProduto());
			ps.setDouble(3, p.getValorProduto());
			ps.setLong(4, p.getCodProduto());
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void excluir(Produto p) {
		String sql = "DELETE Produto WHERE codProd = ?";
		Connection con = GenericDAO.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setLong(1, p.getCodProduto());
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public Produto pesquisar(String nomeProduto) {
		String sql = "SELECT * FROM Produto WHERE UPPER(nomeProd) LIKE'%' + UPPER(?) + '%'";
		Produto p = null;
		Connection con = GenericDAO.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setString(1, nomeProduto);
			ResultSet rs = ps.executeQuery();
			
			if(rs.next()){
				p = new Produto();
				p.setCodProduto(rs.getLong("codProd"));
				p.setNomeProduto(rs.getString("nomeProd"));
				p.setDescricaoProduto(rs.getString("DescricaoProd"));
				p.setValorProduto(rs.getDouble("ValorProd"));
				
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return p;
	}

	public Produto pesquisar(long codProduto) {
		String sql = "SELECT * FROM Produto WHERE codProd = ?";
		Produto p = null;
		Connection con = GenericDAO.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setLong(1, codProduto);
			ResultSet rs = ps.executeQuery();
			
			if(rs.next()){
				p = new Produto();
				p.setCodProduto(codProduto);
				p.setNomeProduto(rs.getString("nomeProd"));
				p.setDescricaoProduto(rs.getString("DescricaoProd"));
				p.setValorProduto(rs.getDouble("ValorProd"));
				
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return p;
	}

	public Set<Produto> todos() {
		String sql = "SELECT * FROM Produto";
		Set<Produto> lista = new HashSet<Produto>();
		Connection con = GenericDAO.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();
			
			while(rs.next()){
				Produto p = new Produto();
				p.setCodProduto(rs.getLong("codProd"));
				p.setNomeProduto(rs.getString("nomeProd"));
				p.setDescricaoProduto(rs.getString("DescricaoProd"));
				p.setValorProduto(rs.getDouble("ValorProd"));
				lista.add(p);				
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return lista;
	}

}
